#ifndef __ming_fyp_ShadowAlgorithm_h__
#define __ming_fyp_ShadowAlgorithm_h__

//------------------------------------------------------------------------------
// header includes

//------------------------------------------------------------------------------
namespace ming
{
namespace fyp
{
	class TResourcePool;
	class TObjectManager;
	class TGuiManager;

	namespace render
	{
		class IRenderer;
	}

	//--------------------------------------------------------------------------
	class IShadowAlgorithm
	{
	public:
		virtual ~IShadowAlgorithm() {}
		
		//------------------------------
		// external operations
		virtual void Init(TResourcePool *resPool, TGuiManager *guiMgr) = 0;
		
		virtual void RenderScene(
			render::IRenderer *renderer,
			TResourcePool *resPool,
			TObjectManager *objMgr) = 0;

		virtual void Final(TResourcePool *resPool) = 0;
		
		virtual void ChangeShadowMapSize(size_t sz) = 0;
		
		virtual const char* GetDescription() = 0;
	};
	
	//--------------------------------------------------------------------------
}
}


#endif	//__ming_fyp_ShadowAlgorithm_h__